package cn.wangjie.spark.start

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * 使用Scala语言编写Spark 第一个程序：词频统计WordCount
 */
object SparkWordCount {

  // Driver Program
	def main(args: Array[String]): Unit = {
		
		// TODO：创建SparkContext实例对象，读取数据封装RDD和调度Job执行
		val sparkConf: SparkConf = new SparkConf()
			// 设置应用名称
    		.setAppName("SparkWordCount")
			// 设置应用运行模式：本地模式，集群模式
    		.setMaster("local[2]")
		val sc: SparkContext = new SparkContext(sparkConf)
		
		// TODO: step 1: 读取HDFS上数据
		val inputRDD: RDD[String] = sc.textFile("/datas/wordcount.data")
		
		// TODO: step 2: 处理数据
		val resultRDD: RDD[(String, Int)] = inputRDD
    			.flatMap(line => line.split("\\s+"))
				.map(word => (word ,1))
				// 分组聚合
				.reduceByKey((tmp, item) => tmp + item)  // TODO: 此处使用隐式转换
		
		// TODO: step 3: 输出结果
		resultRDD.foreach(item => println(item))
		resultRDD.saveAsTextFile("/datas/output")
		
		// 线程休眠
		Thread.sleep(10000000)
		
		// 应用程序完成，关闭资源
		sc.stop()
	}
	
}
